﻿// 704 动态区间最大数.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <deque>

using namespace std;
/*
http://oj.daimayuan.top/course/7/problem/509
给你 n个数字 a1,a2,...,an
，请从左到右输出每个长度为 m的数列段内的最大数。

这些数列段分别为 [1,m],[2,m+1],...,[n−m+1,n]
，共 n−m+1个。

输入格式
第一行两个整数 n,m。

接下来一行 n个整数 a1,a2,...,an。

输出格式
输出一行 n−m+1个数，表示答案。

样例输入
7 3
1 5 3 4 2 2 1
样例输出
5 5 4 4 2
数据规模
对于 100%
 的数据，保证 1≤m≤n≤2×105,1≤ai≤109。
*/

const int N = 200010;
int arr[N];
deque<int> q;
int n, m;

int main()
{
	cin >> n >> m;
	for (int i = 1; i <= n; i++) { cin >> arr[i]; }

	for (int i = 1; i <= n; i++) {
		while (!q.empty() && i - q.front() >= m) q.pop_front();
		while (!q.empty() && arr[q.back()] < arr[i]) q.pop_back();
		q.push_back(i);
		if (i>= m) {
			cout << arr[q.front()] << " ";
		}
	}

	return 0;
}
 